# utils/useragents.py:获取用户代理信息（get_user_agent）
import re
from django.utils.safestring import mark_safe


def get_user_agent(request) -> dict:
    """
    解析User-Agent头信息，返回结构化数据
    支持浏览器/OS/设备类型识别
    """
    ua = request.META.get('HTTP_USER_AGENT', 'Unknown')

    # 基础解析（生产环境建议使用user_agents库）
    return {
        'raw': mark_safe(ua),  # 标记为安全字符串
        'browser': _parse_browser(ua),
        'os': _parse_os(ua),
        'device': _parse_device(ua)
    }


def _parse_browser(ua: str) -> str:
    """解析浏览器类型"""
    patterns = {
        r'Chrome/(\d+)': 'Chrome',
        r'Firefox/(\d+)': 'Firefox',
        r'Edge/(\d+)': 'Edge',
        r'Version/(\d+).*Safari': 'Safari'
    }
    for pattern, name in patterns.items():
        if re.search(pattern, ua):
            return name
    return 'Other'


def _parse_os(ua: str) -> str:
    """解析操作系统"""
    if 'Windows NT 10' in ua: return 'Windows 10'
    if 'Mac OS X' in ua: return 'macOS'
    if 'Linux' in ua: return 'Linux'
    if 'Android' in ua: return 'Android'
    return 'Unknown'


def _parse_device(ua: str) -> str:
    """解析设备类型"""
    if re.search(r'Mobile|iPhone|Android', ua): return 'Mobile'
    if re.search(r'Tablet|iPad', ua): return 'Tablet'
    if 'Bot' in ua: return 'Bot'
    return 'Desktop'
